#include <bits/stdc++.h>
using namespace std;

#define int long long

void solve(){
	int n,q;cin>>n>>q;
	vector<vector<pair<int,int>>> g(n+1);
	for(int i=0;i<n-1;i++){
		int u,v,w;cin>>u>>v>>w;
		g[u].emplace_back(v,w);
		g[v].emplace_back(u,w);
	}
	int m=__lg(n)+1;
	vector<int> dep(n+1);
	vector<vector<int>> pa(n+1,vector<int>(m));
	vector<vector<int>> gc(n+1,vector<int>(m));
	auto dfs=[&](auto&&dfs,int x,int fa)->void{
		dep[x]=dep[fa]+1;
		for(auto&[y,d]:g[x]){
			if(y!=fa){
				pa[y][0]=x;
				gc[y][0]=d;
				for(int i=1;i<m;i++){
					pa[y][i]=pa[pa[y][i-1]][i-1];
					gc[y][i]=gcd(gc[y][i-1],gc[pa[y][i-1]][i-1]);
				}
				dfs(dfs,y,x);
			}
		}
	};
	dfs(dfs,1,0);

	auto get_lca=[&](int x,int y)->int{
		if(dep[x]>dep[y]) swap(x,y);
		int res=0;
		for(int i=m-1;i>=0;i--){
			if(dep[pa[y][i]]>=dep[x]){
				res=gcd(res,gc[y][i]);
				y=pa[y][i];
			}
		}
		if(x==y) return res;
		for(int i=m-1;i>=0;i--){
			int fx=pa[x][i],fy=pa[y][i];
			if(fx!=fy){
				res=gcd(res,gc[x][i]);
				res=gcd(res,gc[y][i]);
				x=fx;
				y=fy;
			}
		}
		res=gcd(res,gc[x][0]);
		res=gcd(res,gc[y][0]);
		return res;
	};

	while(q--){
		int u,v,k;cin>>u>>v>>k;
		if(get_lca(u,v)%k==0)cout<<"YES\n";
		else cout<<"NO\n";
	}
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t=1;
	// cin>>t;
	while(t--){
		solve();
		if(t)cout<<"\n";
	}
	return 0;
}
